package com.cy.pj.sys.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.cy.pj.common.bo.PageObject;
import com.cy.pj.common.exception.ServiceException;
import com.cy.pj.sys.dao.SysLogDao;
import com.cy.pj.sys.pojo.SysLog;
import com.cy.pj.sys.service.SysLogService;
/**
 * 用于封装业务层异常先生系的一个异常对象
 * @author private
 *
 */
@Service

public class SysLogServiceImpl implements SysLogService {
	@Autowired
	private SysLogDao sysLogDao;
	
	/** 查找本页数据 
	 * 1.我一页显示几条数据? pageSize *
	 * 2.我要第几页的(当前页)?	 	pageCurrent *
	 * 
	 * -----------
	 * 页面要的:
	 * 总记录数 rowCount
	 * 总页数 pageCount
	 * ------------------
	 * 返回给页面的?
	 * 返回给页面的数据(分页数据)  records
	 * */
	public PageObject<SysLog> findPageObjects(Long pageCurrent,String username){
		//1.参数校验
		//null.toString() => 空指针
		if(pageCurrent==null || pageCurrent<1) {
			throw new IllegalArgumentException("页码值不正确");
		}
		//2.基于条件查询总记录
		Long rowCount = sysLogDao.getRowCount(username);
		if(rowCount==0) {
			throw new ServiceException("没有找到对应的记录");
		}
		//3.查询当前页要呈现的用户日志行为
		int pageSize = 5;
		long startIndex = (pageCurrent-1)*pageSize;
		List<SysLog> list = sysLogDao.findPageObjects(username, startIndex, pageSize);
		//4.封装结果返回
		PageObject<SysLog> object = new PageObject<>(rowCount,pageCurrent,pageSize,list);
		return object;
	}

	@Override
	public int deleteObjects(Integer... ids) {
		//参数校验
		if(ids==null||ids.length==0) {
			throw new IllegalArgumentException("请先选择");
		}
		//执行删除
		int rows = sysLogDao.deleteObjects(ids);
		if(rows==0)
			throw new ServiceException("数据可能已经被删除");
		//返回结果
		return rows;
	}
	
	//@Async 描述的方法为一个异步切入点方法(此方法会运行在Spring框架提供的一个线程中)
	@Async//描述的方法表示要运行在一个独立线程中(这个线程由Spring框架内置的线程池来提供)
	@Transactional(propagation = Propagation.REQUIRES_NEW)
	@Override
	public void insertObject(SysLog sysLog) {
		sysLogDao.insertObject(sysLog);
	}
}
 